package com.example.usercenter.service;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.example.usercenter.common.ErrorCode;
import com.example.usercenter.exception.ServiceException;
import com.example.usercenter.model.domain.Team;
import com.baomidou.mybatisplus.extension.service.IService;
import com.example.usercenter.model.domain.TeamUser;
import com.example.usercenter.model.domain.User;
import com.example.usercenter.model.request.*;
import com.example.usercenter.model.vo.TeamVO;

import java.util.List;
import java.util.stream.Collectors;

/**
* @author 57017
* @description 针对表【t_team(队伍表)】的数据库操作Service
* @createDate 2024-05-17 13:11:57
*/
public interface TeamService extends IService<Team> {
    /**
     * 创建队伍
     * @param teamCreateRequest 创建队伍请求
     * @return 队伍id
     */
    Long createTeam(TeamCreateRequest teamCreateRequest, User loginUser);

    /**
     * 加入队伍
     * @param teamAddRequest 加入队伍请求
     * @param loginUser 当前登录用户
     * @return 是否加入成功
     */
    boolean addTeam(TeamAddRequest teamAddRequest, User loginUser);

    /**
     * 退出队伍
     * @param teamQuitRequest 退出队伍请求
     * @param loginUser 当前登录用户
     * @return 是否退出成功
     */
    boolean quitTeam(TeamQuitRequest teamQuitRequest, User loginUser);

    /**
     * 展示队伍列表信息
     * @return 队伍列表信息
     */
    List<TeamVO> showTeamList();

    /**
     * 解散队伍
     * @param teamDissolutionRequest 解散队伍请求
     * @param loginUser 当前登录用户
     * @return 是否解散成功
     */
    Boolean dissolutionTeam(TeamDissolutionRequest teamDissolutionRequest, User loginUser);

    /**
     * 修改队伍信息
     * @param teamUpdateRequest 修改队伍信息请求
     * @param loginUser 当前登录用户
     * @return 是否修改成功
     */
    Boolean updateTeam(TeamUpdateRequest teamUpdateRequest, User loginUser);

    /**
     * 获取登录用户所创建的队伍
     * @param loginUser 当前登录用户
     * @return 登录用户创建的队伍
     */
    List<TeamVO> showCreateTeamList(User loginUser);

    /**
     * 获取登录用户所加入的队伍
     * @param loginUser 当前登录用户
     * @return 登录用户加入的队伍
     */
    List<TeamVO> showJoinTeamList(User loginUser);
}
